import type { WorkBook } from 'xlsx'
import type { AoAToSheet, JsonToSheet } from './export-excel.types'

import * as xlsx from 'xlsx'

const { utils, writeFile } = xlsx

const DEF_FILE_NAME = 'new-excel.xlsx'
export function jsonToSheetXlsx<T = any>({
    data,
    header,
    filename = DEF_FILE_NAME,
    json2sheetOpts = {},
    write2excelOpts = { bookType: 'xlsx' },
}: JsonToSheet<T>) {
    const arrData = [...data]
    if (header) {
        arrData.unshift(header)
        json2sheetOpts.skipHeader = true
    }

    const worksheet = utils.json_to_sheet(arrData, json2sheetOpts)

    /* add worksheet to workbook */
    const workbook: WorkBook = {
        SheetNames: [filename],
        Sheets: {
            [filename]: worksheet,
        },
    }
    /* output format determined by filename */
    writeFile(workbook, filename, write2excelOpts)
    /* at this point, out.xlsb will have been downloaded */
}

export function aoaToSheetXlsx<T = any>({
    data,
    header,
    filename = DEF_FILE_NAME,
    write2excelOpts = { bookType: 'xlsx' },
}: AoAToSheet<T>) {
    const arrData = [...data]
    if (header) {
        arrData.unshift(header)
    }

    const worksheet = utils.aoa_to_sheet(arrData)

    /* add worksheet to workbook */
    const workbook: WorkBook = {
        SheetNames: [filename],
        Sheets: {
            [filename]: worksheet,
        },
    }
    /* output format determined by filename */
    writeFile(workbook, filename, write2excelOpts)
    /* at this point, out.xlsb will have been downloaded */
}
